/******************************************************************************
秋夜静，独坐对残灯。
啼笑非非谁识我，坐行梦梦尽缘君，何所慰消沉。
风卷雨，雨复卷侬心。
心似欲随风雨去，茫茫大海任浮沉。
无爱亦无恨。
******************************************************************************/
#include "kbRGB.h"
//#include "kbRGB_Angle.h"
//#include "UGUI/ugui.h"
//#include "LCD/lcd.h"
#include "Curve/hsv.h"
#include "cledMatrix/crgbMatrix.h"
#include <math.h>
#include <stdlib.h>
//#include <string.h>

struct kbRGB_Params kbrgb_Params;

//static UG_GUI gui;
//static uint32_t OLED_GRAM[KBRGB_ANGLE_SIZE][KBRGB_ANGLE_SIZE];  // 4MB

const struct kbRGB_Effect_t kbrgb_effect[KB_RGB_EFFECTS] = {
    /*************************************************************************************************\
    |        Advanced [13-1]:0                                                                            |
    \*************************************************************************************************/
    {kbRGB_BouncingBallEffect_Init, kbRGB_BouncingBallEffect},         // 弹力球
    {kbRGB_Bubbles_Init, kbRGB_Bubbles},                               // 气泡
    {kbRGB_FractalMotion_Init, kbRGB_FractalMotion},                   // 分形运动
    {kbRGB_GradientWave_Init, kbRGB_GradientWave},                     // 梯度波
    {kbRGB_MovingPanes_Init, kbRGB_MovingPanes},                       // 移动窗格
    {kbRGB_Rain_Init, kbRGB_Rain},                                     // 下雨
    {kbRGB_SmoothBlink_Init, kbRGB_SmoothBlink},                       // 平滑闪烁
    {kbRGB_Spiral_Init, kbRGB_Spiral},                                 // 螺旋效果
    {kbRGB_StarryNight_Init, kbRGB_StarryNight},                       // 星空
    {kbRGB_SwirlCircles_Init, kbRGB_SwirlCircles},                     // 漩涡圈
    {kbRGB_Wavy_Init, kbRGB_Wavy},                                     // 波形的
    {kbRGB_ZigZag_Init, kbRGB_ZigZag},                                 // 之字形的
    /*************************************************************************************************\
    |        Beams [2]:12                                                                                |
    \*************************************************************************************************/
    {kbRGB_CrossingBeams_Init, kbRGB_CrossingBeams},                   // 交叉梁
    {kbRGB_RotatingBeam_Init, kbRGB_RotatingBeam},                     // 旋转射束
    /*************************************************************************************************\
    |        Rainbow [9-1]:14                                                                         |
    \*************************************************************************************************/
    {kbRGB_ColorWheel_Init, kbRGB_ColorWheel},                         // 色轮
    {kbRGB_DoubleRotatingRainbow_Init, kbRGB_DoubleRotatingRainbow},   // 双旋转彩虹
    {kbRGB_Hypnotoad_Init, kbRGB_Hypnotoad},                           // Hypnotoad
    {kbRGB_NoiseMap_Init, kbRGB_NoiseMap},                             // 噪声地图
    {kbRGB_NoiseCircle_Init, kbRGB_NoiseCircle},                       // 噪声地图
    {kbRGB_RainbowWave_Init, kbRGB_RainbowWave},                       // 彩虹波
    {kbRGB_RadialRainbow_Init, kbRGB_RadialRainbow},                   // 径向彩虹
    {kbRGB_RotatingRainbow_Init, kbRGB_RotatingRainbow},               // 旋转的彩虹
    {kbRGB_SpectrumCycling_Init, kbRGB_SpectrumCycling},               // 光谱骑自行车
    /*************************************************************************************************\
    |        Random [2]:22                                                                               |
    \*************************************************************************************************/
    {kbRGB_Bloom_Init, kbRGB_Bloom},                                   // 花朵
    {kbRGB_Lightning_Init, kbRGB_Lightning},                           // 闪电
    /*************************************************************************************************\
    |        Simple [11]:24                                                                              |
    \*************************************************************************************************/
    {kbRGB_Breathing_Init, kbRGB_Breathing},                           // 呼吸
    {kbRGB_BreathingCircle_Init, kbRGB_BreathingCircle},               // 呼吸循环
    {kbRGB_Comet_Init, kbRGB_Comet},                                   // 彗星
    {kbRGB_Fill_Init, kbRGB_Fill},                                     // 充满
    {kbRGB_Marquee_Init, kbRGB_Marquee},                               // 大天幕
    {kbRGB_Mosaic_Init, kbRGB_Mosaic},                                 // 马赛克
    {kbRGB_MotionPoint_Init, kbRGB_MotionPoint},                       // 运动点
    {kbRGB_MotionPoints_Init, kbRGB_MotionPoints},                     // 运动点
    {kbRGB_Stack_Init, kbRGB_Stack},                                   // 堆
    {kbRGB_Swap_Init, kbRGB_Swap},                                     // 交换
    {kbRGB_Visor_Init, kbRGB_Visor},                                   // 遮阳板
};

//static void _ugui_init(void)
//{
//    kbRGB_clear();
//    /* Init ?UI */
//    UG_Init(&gui,(void(*)(UG_S16,UG_S16,UG_COLOR))kbRGB_pset, KBRGB_ANGLE_SIZE, KBRGB_ANGLE_SIZE);
//    //UG_FontSelect(&FONT_8X12);
//    //UG_FontSelect(&FONT_32X53);
//    UG_FontSelect(&FONT_4X6);
//    UG_FillScreen( C_BLACK );
//}
//清屏函数
//void kbRGB_clear(void)
//{
//    uint32_t i,n;
//    for(i=0;i<1024;i++)
//    {
//        for(n=0;n<1024;n++)
//        {
//            OLED_GRAM[n][i]=0x00;//清除所有数据
//        }
//    }
//}
//void kbRGB_pset(UG_S16 x, UG_S16 y, UG_COLOR t)
//{
//    //OLED_DrawPoint(x, y, t);
//    OLED_GRAM[x][y] = t;
//}
//uint32_t kbRGB_get_point(UG_S16 x, UG_S16 y)
//{
//    return OLED_GRAM[x][y];
//}
//清屏函数
void kbRGB_clear(void)
{
    mled_fillScreen(0x00);
}
void kbRGB_full(const uint32_t color)
{
    mled_fillScreen(color);
}
void kbRGB_pset(UG_S16 x, UG_S16 y, UG_COLOR t)
{
    mled_draw_pixel(x, y, t);
}
uint32_t kbRGB_get_point(UG_S16 x, UG_S16 y)
{
    return mled_get_pixel(x,y);
}
const uint32_t* kbRGB_get_frame_buffer(void)
{
    return mled_get_frame_buffer();
}

void kbRGB_Init(void)
{
    //_ugui_init();
    kbRGB_clear();
    //UG_DrawLine(0, 0, 200, 200, bar[0]);
    //UG_FillCircle( 100, 100, 50, bar[5]);
    //UG_PutString( 20, 20, "Hello");
    //UG_DrawCircle(20, 21, 20, COLOR_RGB_GREEN);
    //UG_DrawCircle(20, 41, 20, COLOR_RGB_GREEN);
    kbrgb_Params.time = 1000.0;
    kbrgb_Params.FPS = 60;
    kbrgb_Params.Speed = 100;
    kbrgb_Params.Slider2Val = 50;
    srand(tb_get_sys_time_ms());
}
void kbRGB_memset(void *_Dst,int _Val,size_t _Size)
{
    uint8_t* const Dst = (uint8_t*)_Dst;
    size_t i;
    for(i=0; i<_Size; i++) Dst[i] = _Val;
}
void kbRGB_Params_Init(void)
{
    kbRGB_memset(&kbrgb_Params, 0x00, sizeof(kbrgb_Params));
    kbrgb_Params.time = 1000.0;
    kbrgb_Params.FPS = 60;
    kbrgb_Params.Speed = 150;
    kbrgb_Params.Slider2Val = 20;
//    kbrgb_Params.shape = 0;
    kbrgb_Params.progress = 0.f;
}
